package javachongkao.编程基础.图片旋转;

import java.util.Scanner;
//7-59 图片旋转
//二维图片由一个个像素点组成，目前灰度图像使用一个0-255之间的整数表示某个像素点的像素值。编程完成图片旋转控制程序。
//
//本题目要求读入2个整数m和n（<=20），作为图片的长宽尺寸。输入1个整数r，作为旋转角度（只能输入90 180 -90中的一个，90表示图形向左旋转90度，-90表示图形向右旋转90度）。然后按照行列输入图片像素值，
//
//输入格式:
//第一行：2个整数m和n（<=20）
//
//第二行：2个整数r（只能是90 180 -90中的一个，否则提示：angle data error
//
//第三行以后：输入m行n列的整数数据，必须在0-255之间，否则提示：matrix data error
//
//以上输入的都是整数，若有非整数的数据输入，统一提示：data type error
//
//输出格式:
//按要求旋转后的图片矩阵数据
//
//输入样例:
//在这里给出一组输入。例如：
public class Main {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int m, n, r;
        int[][] matrix;

        // 输入验证：m和n
        if (!scanner.hasNextInt()) {
            System.out.println("data type error");
            return;
        }
        m = scanner.nextInt();
        if (!scanner.hasNextInt()) {
            System.out.println("data type error");
            return;
        }
        n = scanner.nextInt();

        // 输入验证：旋转角度r
        if (!scanner.hasNextInt()) {
            System.out.println("data type error");
            return;
        }
        r = scanner.nextInt();
        if (r != 90 && r != 180 && r != -90) {
            System.out.println("angle data error");
            return;
        }

        // 输入矩阵并验证像素值
        matrix = new int[m][n];
        for (int i = 0; i < m; i++) {
            for (int j = 0; j < n; j++) {
                if (!scanner.hasNextInt()) {
                    System.out.println("data type error");
                    return;
                }
                matrix[i][j] = scanner.nextInt();
                if (matrix[i][j] < 0 || matrix[i][j] > 255) {
                    System.out.println("matrix data error");
                    return;
                }
            }
        }

        // 旋转矩阵
        int[][] rotated;
        switch (r) {
            case 90: // 左旋90度
                rotated = new int[n][m];
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        rotated[i][j] = matrix[j][n - 1 - i];
                    }
                }
                break;
            case -90: // 右旋90度
                rotated = new int[n][m];
                for (int i = 0; i < n; i++) {
                    for (int j = 0; j < m; j++) {
                        rotated[i][j] = matrix[m - 1 - j][i];
                    }
                }
                break;
            case 180: // 180度
                rotated = new int[m][n];
                for (int i = 0; i < m; i++) {
                    for (int j = 0; j < n; j++) {
                        rotated[i][j] = matrix[m - 1 - i][n - 1 - j];
                    }
                }
                break;
            default:
                rotated = matrix;
        }

        // 输出旋转后的矩阵
        for (int[] row : rotated) {
            for (int i = 0; i < row.length; i++) {
                System.out.print(row[i]);
                if (i < row.length - 1) {
                    System.out.print(" ");
                }
            }
            System.out.println();
        }
        scanner.close();
    }
}
